#include "linkstack.h"

// 创建一个空栈
linkstack * create_empty_linkstack() {
    //分配内存
    linkstack*s = (linkstack *)malloc(sizeof(linkstack));

    //初始化
    memset(s, 0, sizeof(linkstack));

    // 设置栈头的top 为0, 指针指向空
    s->top = NULL;
    s->n = 0;
    return s;
}

// 判断栈是否为空 以top是否为空
int is_empty_linkstack(linkstack * s) {

    return s->top == NULL? 1: 0;
}

// 入栈
void push_linkstack(linkstack* s, dataType x) {
    //分配结点内存
    linknode * p = (linknode *) malloc(sizeof(linknode));

    p->data = x;

    // 头插法插入链表
    p->next = s->top;

    // 更新栈头的数据
    s->top = p;
    s->n++;
}

// 出栈 
dataType pop_linkstack(linkstack * s) {
    dataType x;
    // temp
    linknode * temp = NULL;
    temp = s->top;
    x = temp->data;
    s->top = temp->next;
    free(temp);
    temp = NULL;
    s->n --;
    return x;
}

// 获取栈顶元素
dataType get_top_linkstack(linkstack * s) {
    return s->top->data;
}